package com.irdstudio.efp.cus.service.impl;

import com.alibaba.fastjson.JSON;
import com.irdstudio.basic.framework.core.base.DataOptionalAuthorityDao;
import com.irdstudio.basic.framework.core.base.FrameworkService;
import com.irdstudio.basic.framework.core.util.DateUtility;
import com.irdstudio.basic.framework.core.util.TimeUtil;
import com.irdstudio.basic.framework.core.vo.CusHandOverVO;
import com.irdstudio.efp.cus.service.dao.AccoutErroTempDao;
import com.irdstudio.efp.cus.service.dao.CusIndivDao;
import com.irdstudio.efp.cus.service.dao.GzBankAcctInfoTempDao;
import com.irdstudio.efp.cus.service.dao.InfoAccountTempDao;
import com.irdstudio.efp.cus.service.domain.AccoutErroTemp;
import com.irdstudio.efp.cus.service.domain.CusIndiv;
import com.irdstudio.efp.cus.service.domain.GzBankAcctInfoTemp;
import com.irdstudio.efp.cus.service.domain.InfoAccountTemp;
import com.irdstudio.efp.cus.service.facade.CusIndivService;
import com.irdstudio.efp.cus.service.vo.CusIndivVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.util.*;

/**
 * <p>
 * ServiceImpl: 个人客户信息表
 * <p>
 *
 * @author chenqm1
 * @date 2018-05-04
 */
@Service("cusIndivService")
public class CusIndivServiceImpl implements CusIndivService, FrameworkService {

	private static Logger logger = LoggerFactory.getLogger(CusIndivServiceImpl.class);

	@Autowired
	private CusIndivDao cusIndivDao;

	@Autowired
	private GzBankAcctInfoTempDao gzBankAcctInfoTempDao;
	@Autowired
	private InfoAccountTempDao infoAccountTempDao;
	@Autowired
	private AccoutErroTempDao accoutErroTempDao;

	/**
	 * 新增操作
	 */
	@Override
	public int insertCusIndiv(CusIndivVO inCusIndivVo) {
		logger.info("当前新增数据为:" + inCusIndivVo.toString());
		int num = 0;

		try {
			CusIndiv cusIndiv = new CusIndiv();
			beanCopy(inCusIndivVo, cusIndiv);
			num = cusIndivDao.insertCusIndiv(cusIndiv);
		} catch (Exception e) {
			logger.error("新增数据发生异常!", e);
			num = -1;
		}
		logger.info("当前新增数据条数为:" + num);
		return num;
	}

	/**
	 * 删除操作
	 */
	@Override
	public int deleteByPk(CusIndivVO inCusIndivVo) {
		logger.info("当前删除数据条件为:" + inCusIndivVo);
		int num = 0;
		try {
			CusIndiv cusIndiv = new CusIndiv();
			beanCopy(inCusIndivVo, cusIndiv);
			num = cusIndivDao.deleteByPk(cusIndiv);
		} catch (Exception e) {
			logger.error("删除数据发生异常!", e);
			num = -1;
		}
		logger.info("根据条件:" + inCusIndivVo + "删除的数据条数为" + num);
		return num;
	}

	/**
	 * 更新操作
	 */
	@Override
	public int updateByPk(CusIndivVO inCusIndivVo) {
		logger.info("当前修改数据为:" + inCusIndivVo.toString());
		int num = 0;
		try {
			CusIndiv cusIndiv = new CusIndiv();
			beanCopy(inCusIndivVo, cusIndiv);
			num = cusIndivDao.updateByPk(cusIndiv);
		} catch (Exception e) {
			logger.error("修改数据发生异常!", e);
			num = -1;
		}
		logger.info("根据条件:" + inCusIndivVo + "修改的数据条数为" + num);
		return num;
	}

	/**
	 * 查询操作
	 */
	@Override
	public CusIndivVO queryByPk(CusIndivVO inCusIndivVo) {

		logger.info("当前查询参数信息为:" + JSON.toJSONString(inCusIndivVo));
		try {

			CusIndiv queryCusIndiv = new CusIndiv();
			beanCopy(inCusIndivVo, queryCusIndiv);
			CusIndiv queryRslCusIndiv = cusIndivDao.queryByPk(queryCusIndiv);
			if (Objects.nonNull(queryRslCusIndiv)) {
				CusIndivVO outCusIndivVo = beanCopy(queryRslCusIndiv, new CusIndivVO());
				logger.info("当前查询结果为:" + JSON.toJSONString(outCusIndivVo));
				return outCusIndivVo;
			} else {
				logger.info("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	/**
	 * 查询用户权限数据
	 */
	@Override
	@SuppressWarnings("unchecked")
	public List<CusIndivVO> queryAllOwner(CusIndivVO cusIndivVo) {

		logger.info("当前查询本人所属数据信息的参数信息为:");
		CusIndiv cusIndiv = beanCopy(cusIndivVo, new CusIndiv());
		List<CusIndivVO> list = null;
		try {
			List<CusIndiv> cusIndivs = cusIndivDao.queryAllOwnerByPage(cusIndiv);
			logger.info("当前查询本人所属数据信息的结果集数量为:" + cusIndivs.size());
			pageSet(cusIndivs, cusIndiv);
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}

	/**
	 * 查询当前机构权限数据
	 */
	@Override
	@SuppressWarnings("unchecked")
	public List<CusIndivVO> queryAllCurrOrg(CusIndivVO cusIndivVo) {

		logger.info("当前查询本人所属机构数据信息的参数信息为:");
		CusIndiv cusIndiv = beanCopy(cusIndivVo, new CusIndiv());
		List<CusIndiv> cusIndivs = cusIndivDao.queryAllCurrOrgByPage(cusIndiv);
		logger.info("当前查询本人所属机构数据信息的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			pageSet(cusIndivs, cusIndiv);
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;

	}

	/**
	 * 查询当前机构及下属机构权限数据
	 */
	@Override
	@SuppressWarnings("unchecked")
	public List<CusIndivVO> queryAllCurrDownOrg(CusIndivVO cusIndivVo) {

		logger.info("当前查询本人所属机构及以下数据信息的参数信息为:");
		CusIndiv cusIndiv = beanCopy(cusIndivVo, new CusIndiv());
		List<CusIndiv> cusIndivs = cusIndivDao.queryAllCurrDownOrgByPage(cusIndiv);
		logger.info("当前查询本人所属机构及以下数据信息的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			pageSet(cusIndivs, cusIndiv);
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;

	}

	@Override
	public boolean insertCusInfoFromIqpCusInfo(String lmtSerno) throws Exception {
		return true;
	}

	@Override
	public boolean doCusHandOver(CusHandOverVO cusHandOverVO) throws Exception {
		boolean flag = true;
		return flag;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<CusIndivVO> queryCusIndivByCusManager(CusIndivVO cusIndivVo) {

		logger.info("当前查询客户经理下客户的参数信息为:" + cusIndivVo);
		List<CusIndiv> cusIndivs = cusIndivDao.queryCusIndivByCusManByPage(cusIndivVo);
		logger.info("当前查询客户经理下客户的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			pageSet(cusIndivs, cusIndivVo);
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<CusIndivVO> queryCusByCusManagerArea(CusIndivVO cusIndivVo) {
		logger.info("当前查询客户经理在区域编码下的参数信息为:" + cusIndivVo);
		List<CusIndiv> cusIndivs = cusIndivDao.queryCusByCusManagerArea(cusIndivVo);
		logger.info("当前查询客户经理在区域编码下的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			pageSet(cusIndivs, cusIndivVo);
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<CusIndivVO> queryCusByHandoverHis(String cusManager) {
		// String handoverEndDate = this.getOpenday();
		String handoverEndDate = "2019-02-28"; // 营业日期
		String handoverStartDate = "";
		try {
			handoverStartDate = TimeUtil.addYear(handoverEndDate, -1);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		logger.info("当前查询客户经理 在移交日期范围内接收到的客户信息的参数信息为cusManager:" + cusManager + ";handoverStartDate:" + handoverStartDate
				+ ";handoverEndDate:" + handoverEndDate);
		List<CusIndiv> cusIndivs = cusIndivDao.queryCusByHandoverHis(cusManager, handoverStartDate, handoverEndDate);
		logger.info("当前查询客户经理 在移交日期范围内接收到的客户信息下的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}

		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<CusIndivVO> queryCusAllByCusManager(CusIndivVO cusIndivVO) {
		logger.info("当前查询客户经理下未开始移交的所有客户的参数信息为:" + cusIndivVO);
		List<CusIndiv> cusIndivs = cusIndivDao.queryCusAllByCusManager(cusIndivVO);
		logger.info("当前查询客户经理下未开始移交的所有客户的结果集数量为:" + cusIndivs.size());
		List<CusIndivVO> list = null;
		try {
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}

	public DataOptionalAuthorityDao getDataAuthorityDao() {
		return this.cusIndivDao;
	}

	@Override
	public Map<String, Object> getCusCrdGradeByCusIds(List<String> cusIds) {
		if (Objects.isNull(cusIds) || cusIds.size() == 0) {
			return null;
		}
		Map<String, Object> cusCrdGradeMap = null;
		List<CusIndiv> indivs = cusIndivDao.getCusCrdGradeByCusIds(cusIds);
		if (Objects.nonNull(indivs) && indivs.size() > 0) {
			cusCrdGradeMap = new HashMap<String, Object>();
			for (CusIndiv indiv : indivs) {
				cusCrdGradeMap.put(indiv.getCusId(), indiv.getCrdGrade());
			}
		}
		return cusCrdGradeMap;
	}

	@Override
	public boolean checkOptionalAuthority(Map<String, String> primaryKey, String authorityType) {
		return false;
	}

	@Override
	public String getCusIdByCertCode(String certType, String certCode) {
		logger.info("根据身份证号获取客户号, 身份证：" + certCode);
		String cusId = cusIndivDao.getCusIdByCertCode(certType, certCode);
		logger.info("根据身份证号获取客户号, 查询结果：" + cusId);
		return cusId;
	}

	/**
	 *
	 * 同步马上的数据 新增 贷款还款明细 <br>
	 * 0.2:ludayong:2019年3月6日 下午5:10:56:修复贷款还款明细信息为空时，出现空指针异常<br>
	 * @author cenyj
	 * @since 2018年12月28日 下午3:33:37
	 * @date 2019年3月6日 下午5:10:56
	 * @version 0.2
	 */
	@Override
	public boolean batchCusIndivFromMaTxt() throws Exception {
		boolean rs = false;
		try {
			// 分页大小
			Integer pageSize = 1000;
			// 分页信息
			GzBankAcctInfoTemp pageInfo = new GzBankAcctInfoTemp();
			// 页数
			int page = 1;
			// pageSize初始化
			if (pageSize > 0) {
				pageInfo.setSize(pageSize);
			} else {
				pageInfo.setSize(1000);
			}
			// 判断循环次数
			int size = gzBankAcctInfoTempDao.queryCount();
			String size_msg = "【客户信息表临时表】数据量：" + size;
			logger.info(size_msg, "message{}");
			int loopCount = (size / pageInfo.getSize()) + 1;
			for (int i = 0; i < loopCount; i++) {
				String page_msg = "【客户信息表临时表】当前页数：" + pageInfo.getPage() + "，分页大小：" + pageInfo.getSize();
				logger.info(page_msg, "message{}");
				// 分页查询【客户信息表临时表】数据
				List<GzBankAcctInfoTemp> tempList = gzBankAcctInfoTempDao.queryByPage(pageInfo);
				if (Objects.nonNull(tempList) && !tempList.isEmpty()) {
					//分页同步客户信息
					syncCusIndivInfo(tempList);
				}
				pageInfo.setPage(++page);
			}

			// 先 对账表，看是否能对应上
			//logger.info("日终批量修改从马上同步过来的临时表数据到本地表：");
			// 先校对 对账临时表的记录条数跟同步过来的数据是否一致 如果一致 再批量 把临时表的数据同步到本地
			// 临时表
			//List<GzBankAcctInfoTemp> list = gzBankAcctInfoTempDao.getGzBankAcctInfoTempList();
			//同步信息为空，返回false
			//if(Objects.isNull(list)) {
			//logger.info("日终批量-同步马上的客户信息为空！");
			//return rs;
			//}
			// 对账列表
			List<InfoAccountTemp> accountList = infoAccountTempDao.getInfoAccountTempList();
			// 对账临时表
			InfoAccountTemp accountTempModel = null;//new InfoAccountTemp();

			int accountCountTemp = 0;// 对账表记录的条数
			int loanTempDatasize = 0;// 实际同步过来的数据总条数
			if (accountList != null && accountList.size() > 0) {
				accountTempModel = accountList.get(0);
			}
			if (accountTempModel != null) {
				accountCountTemp = accountTempModel.getDataCount() == null ? 0 : accountTempModel.getDataCount();
			}
			//loanTempDatasize = list.size();
			loanTempDatasize = size;
			logger.info("对账表记录的条数loanTempDatasize：" + loanTempDatasize + "实际同步过来的数据总条数loanTempDatasize" + loanTempDatasize);
			if (loanTempDatasize != accountCountTemp) {
				try {
					// 如果条数不一样，则记录到erro_msg表
					AccoutErroTemp erroMsgModel = new AccoutErroTemp();
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String currDate = sdf.format(new Date());
					String erroMsg = "记录条数不对";
					String tableName = "GzBankAcctInfoTemp";
					String remark = "同步过来的临时表客户信息表GzBankAcctInfoTemp列表记录总条数" + loanTempDatasize + "条" + "对账表记录条数" + accountCountTemp + "条";
					erroMsgModel.setCreateData(currDate);
					erroMsgModel.setErroMsg(erroMsg);
					erroMsgModel.setRemark(remark);
					erroMsgModel.setTableName(tableName);
					accoutErroTempDao.insert(erroMsgModel);
				} catch (Exception e) {
					// TODO: handle exception
				}
			}
			rs = true;
		} catch (Exception e) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String currDate = sdf.format(new Date());
			logger.error("客户信息数据修改发生异常!", e);
			String tableName = "客户信息表GzBankAcctInfoTemp";
			String erroMsg = "客户信息数据修改发生异常";
			AccoutErroTemp erroMsgModel = new AccoutErroTemp();
			String remark = "客户信息数据修改发生异常";
			erroMsgModel.setCreateData(currDate);
			erroMsgModel.setErroMsg(erroMsg);
			erroMsgModel.setRemark(remark);
			erroMsgModel.setTableName(tableName);
			accoutErroTempDao.insert(erroMsgModel);
			throw new Exception("客户信息数据修改发生异常!", e);
		}
		return rs;
	}

	/**
	 *
	 * 同步客户信息有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月11日 下午5:49:03:新增 <br>
	 * @author ludayong
	 * @since 2019年5月11日 下午5:49:03
	 * @date 2019年5月11日 下午5:49:03
	 * @version 0.1
	 */
	@SuppressWarnings("unchecked")
	@Override
	public int insertOrUpdateCusIndiv(List<CusIndivVO> list) {
		LocalDate today = LocalDate.now();
		String msg1 = "【客户信息表】数据同步开始..." + today;
		logger.info(msg1, "message{}");
		List<CusIndiv> cusIndivlList = new ArrayList<CusIndiv>();
		int num = 0;
		try {
			cusIndivlList = (List<CusIndiv>) beansCopy(list, CusIndiv.class);
			num = cusIndivDao.insertOrUpdateCusIndiv(cusIndivlList);
			String num_msg = "【客户信息表】插入或更新数据处理结果:" + num;
			logger.info(num_msg, "message{}");
		} catch (Exception e) {
			String msg2 = "【客户信息表】插入或更新数据出现异常:" + e;
			logger.error(msg2, "message{}");
			num = -1;
		}
		return num;
	}

	@Override
	public CusIndivVO queryByCust(CusIndivVO cusIndivVo) {
		logger.info("当前查询参数信息为：" + JSON.toJSONString(cusIndivVo));
		try {
			CusIndiv queryCusIndiv = new CusIndiv();
			beanCopy(cusIndivVo, queryCusIndiv);
			CusIndiv queryRslCusIndiv = cusIndivDao.queryByCust(queryCusIndiv);
			if (Objects.nonNull(queryRslCusIndiv)) {
				CusIndivVO outCusIndivVo = beanCopy(queryRslCusIndiv, new CusIndivVO());
				logger.info("当前查询结果为：" + JSON.toJSONString(outCusIndivVo));
				return outCusIndivVo;
			} else {
				logger.info("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	/**
	 *
	 * TODO <br>
	 * 0.1:wanglihua:2019年4月19日 下午5:52:35:TODO <br>
	 * @author wanglihua
	 * @since 2019年4月19日 下午5:52:35
	 * @date 2019年4月19日 下午5:52:35
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
//	@author:liuty
//	@date:2019/10/17
//	涉及产品:税e贷
//	功能:ContractEle
//	原因:增量投产只投了接口没投实现，编译报错因此注释，不影响当前产品实际业务
//	@Override
//	public CusIndivVO queryContractEle(CusIndivVO cusIndivVO) {
//		logger.info("当前查询参数信息为:" + JSON.toJSONString(cusIndivVO));
//		try {
//			CusIndiv queryCusIndiv = new CusIndiv();
//			beanCopy(cusIndivVO, queryCusIndiv);
//			CusIndiv queryRslCusIndiv = cusIndivDao.queryContractEle(queryCusIndiv);
//			if (Objects.nonNull(queryRslCusIndiv)) {
//				CusIndivVO outCusIndivVo = beanCopy(queryRslCusIndiv, new CusIndivVO());
//				logger.info("当前查询结果为:" + JSON.toJSONString(outCusIndivVo));
//				return outCusIndivVo;
//			} else {
//				logger.info("当前查询结果为空!");
//			}
//		} catch (Exception e) {
//			logger.error("查询数据发生异常!", e);
//		}
//		return null;
//	}

	/**
	 *需求编号：【2019D1204】（马上账务文件同步分页处理）
	 *问题编号：【2019D1204】（马上账务文件同步分页处理）
	 *开发人员：【ludayong】
	 *创建日期：【2019/11/27 11:31】
	 *功能描述：分页同步客户信息
	 *修改日期：【2019/11/27 11:31】
	 *修改描述：
	 */
	public void syncCusIndivInfo(List<GzBankAcctInfoTemp> list) {
		try {
			//更新或者新增的记录数
			int num = 0;
			// 本地表进行修改
			if (list != null && list.size() > 0) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				String currDate = sdf.format(new Date());
				logger.info("获取当前时间：" + currDate);
				logger.info("开始循环客户信息数据!");
				for (GzBankAcctInfoTemp fileTemp : list) {
					logger.info("开始循环 证件类型为：" + fileTemp.getIdType() + "证件号码为：" + fileTemp.getIdNo());
					try {
						// 判断本地的表 ，有数据就修改
						// `cert_type` '证件类型',
						// `cert_code` '证件号码',
						currDate = sdf.format(new Date());
						CusIndiv cusIndivByNo = new CusIndiv();
						cusIndivByNo.setCertType(fileTemp.getIdType());
						cusIndivByNo.setCertCode(fileTemp.getIdNo());

						List<CusIndiv> listCusIndiv = cusIndivDao.getCusIndivListByIdTypeAndIdNo(cusIndivByNo);
						logger.info(
								" 证件类型为：" + fileTemp.getIdType() + "证件号码为：" + fileTemp.getIdNo() + "查询出来的集合记录总条数：" + listCusIndiv.size());
						if (listCusIndiv != null && listCusIndiv.size() > 0) {
							CusIndiv cusIndiv = listCusIndiv.get(0);
							logger.info("有 证件类型 为：" + fileTemp.getIdType() + "证件号码为：" + fileTemp.getIdNo() + "的数据，取第0条：");
							if (cusIndiv != null) {
								logger.info("有 证件类型 为：" + fileTemp.getIdType() + "证件号码为：" + fileTemp.getIdNo()
										+ "的数据，取第0条listCusIndiv.get(0)不为空");
								// cusIndiv.setCusId(cusIndiv.getCusId());
								// cusIndiv.setCusName(fileTemp.getCusName());
								logger.info("F-女 =2 	M-男 =1  N-未知 =0；客户传过来的性别：" + fileTemp.getGender());
								// F-女 =2 M-男 =1 N-未知 =0
								String sex = "N";
								if (fileTemp.getGender().equals("F")) {
									logger.info("F-女 =2 	，将转换成 2");
									sex = "2";
								} else if (fileTemp.getGender().equals("M")) {
									logger.info("	M-男 =1 	，将转换成 1");
									sex = "1";
								} else if (fileTemp.getGender().equals("N")) {
									logger.info("	 N-未知 =0 	，将转换成0");
									sex = "0";
								}
								logger.info("性别转换后 的结果为：" + sex);
								cusIndiv.setIndivSex(sex);
								logger.info("给生日赋值：" + DateUtility.format8To10(fileTemp.getBirthday()));
								cusIndiv.setIndivDtOfBirth(DateUtility.format8To10(fileTemp.getBirthday()));
								cusIndiv.setIndivRsdSt("7");
								// cusIndiv.setPhone(fileTemp.getMobileNo());
								cusIndiv.setIndivCountry(fileTemp.getNationality());
								logger.info("给最后修改日期赋值：" + currDate);
								cusIndiv.setLastUpdateTime(currDate);
								logger.info("开始执行更新方法");
								num = cusIndivDao.updateByPk(cusIndiv);
								logger.info("结束执行更新方法，返回值num" + num);
								if (num == -1) {
									logger.info("执行更新方法失败");
									logger.error("客户信息数据修改出错!");
									String tableName = "客户信息表GzBankAcctInfoTemp";
									String erroMsg = "客户信息数据修改出错";
									AccoutErroTemp erroMsgModel = new AccoutErroTemp();
									String remark = "客户信息数据修改出错";
									erroMsgModel.setCreateData(currDate);
									erroMsgModel.setErroMsg(erroMsg);
									erroMsgModel.setRemark(remark);
									erroMsgModel.setTableName(tableName);
									accoutErroTempDao.insert(erroMsgModel);
								}
							}
						} else {
							logger.info("没有对应的客户信息数据" + " 证件类型为：" + fileTemp.getIdType() + "证件号码为：" + fileTemp.getIdNo());
							String tableName = "客户信息表GzBankAcctInfoTemp";
							String erroMsg = "没有对应的客户信息数据";
							AccoutErroTemp erroMsgModel = new AccoutErroTemp();
							String remark = "客户信息数据修改出错";
							erroMsgModel.setCreateData(currDate);
							erroMsgModel.setErroMsg(erroMsg);
							erroMsgModel.setRemark(remark);
							erroMsgModel.setTableName(tableName);
							accoutErroTempDao.insert(erroMsgModel);
						}
					} catch (Exception e) {
						logger.info("客户信息数据修改发生异常");
						logger.error("客户信息数据修改发生异常!", e);
						String tableName = "客户信息表GzBankAcctInfoTemp";
						String erroMsg = "客户信息数据修改发生异常";
						AccoutErroTemp erroMsgModel = new AccoutErroTemp();
						String remark = "客户信息数据修改发生异常";
						erroMsgModel.setCreateData(currDate);
						erroMsgModel.setErroMsg(erroMsg);
						erroMsgModel.setRemark(remark);
						erroMsgModel.setTableName(tableName);
						accoutErroTempDao.insert(erroMsgModel);
					}
				}
			}
		} catch (Exception e) {
			logger.error("同步马上客户信息数据发生异常!", e);
		}
	}

	/**
	 *
	 * TODO <br>
	 * 0.1:wanglihua:2019年4月19日 下午5:52:35:TODO <br>
	 * @author wanglihua
	 * @since 2019年4月19日 下午5:52:35
	 * @date 2019年4月19日 下午5:52:35
	 * @version 0.1 初始为0.1,后续变更则修改
	 */
	@Override
	public CusIndivVO queryContractEle(CusIndivVO cusIndivVO) {
		logger.info("当前查询参数信息为:" + JSON.toJSONString(cusIndivVO));
		try {
			CusIndiv queryCusIndiv = new CusIndiv();
			beanCopy(cusIndivVO, queryCusIndiv);
			CusIndiv queryRslCusIndiv = cusIndivDao.queryContractEle(queryCusIndiv);
			if (Objects.nonNull(queryRslCusIndiv)) {
				CusIndivVO outCusIndivVo = beanCopy(queryRslCusIndiv, new CusIndivVO());
				logger.info("当前查询结果为:" + JSON.toJSONString(outCusIndivVo));
				return outCusIndivVo;
			} else {
				logger.info("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	@Override
	public List<CusIndivVO> queryExAllOwner(CusIndivVO vo) {
		logger.info("当前查询本人所属数据信息的参数信息为:");
		CusIndiv cusIndiv = beanCopy(vo, new CusIndiv());
		List<CusIndivVO> list = null;
		try {
			List<CusIndiv> cusIndivs = cusIndivDao.queryExAllOwner(cusIndiv);
			logger.info("当前查询本人所属数据信息的结果集数量为:" + cusIndivs.size());
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}

	@Override
	public CusIndivVO queryByCondition(CusIndivVO cusIndivVO) {
		logger.info("当前查询参数信息为:" + JSON.toJSONString(cusIndivVO));
		try {
			CusIndiv queryCusIndiv = new CusIndiv();
			beanCopy(cusIndivVO, queryCusIndiv);
			CusIndiv queryRslCusIndiv = cusIndivDao.queryByCondition(queryCusIndiv);
			if (Objects.nonNull(queryRslCusIndiv)) {
				CusIndivVO outCusIndivVo = beanCopy(queryRslCusIndiv, new CusIndivVO());
				logger.info("当前查询结果为:" + JSON.toJSONString(outCusIndivVo));
				return outCusIndivVo;
			} else {
				logger.info("当前查询结果为空!");
			}
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return null;
	}

	@Override
	public List<CusIndivVO> getDatasVyCusId(List<String> cusIdList) {
		logger.info("当前查询本人所属数据信息的参数信息为:" + cusIdList.toString() );
		List<CusIndivVO> list = null;
		try {
			List<CusIndiv> cusIndivs = cusIndivDao.getDatasVyCusId(cusIdList);
			logger.info("当前查询本人所属数据信息的结果集数量为:" + cusIndivs.size());
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}

	@Override
	public int countCusIfosByCon(CusIndivVO cusIndivVO) {
		logger.debug("当前查询参数信息为:" + cusIndivVO);
		int num = 0;
		try {
			num = cusIndivDao.countCusIfosByCon(cusIndivVO);
		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return num;
	}

	@Override
	public int updateAxqUserId(String axqUserId, String cusId) {
		return cusIndivDao.updateAxqUserId(axqUserId, cusId);
	}

	@Override
	public int updateAnnual(BigDecimal perAnnualIncome, BigDecimal famAnnualIncome, String cusId) {
		return cusIndivDao.updateAnnual(perAnnualIncome, famAnnualIncome, cusId);
	}
	@Override
	public int queryCusCountByFstChannel(CusIndivVO cusIndivVO) {
		logger.info("当前查询参数信息为:" + JSON.toJSONString(cusIndivVO));
		int num = 0;
		try {
			CusIndiv queryCusIndiv = new CusIndiv();
			beanCopy(cusIndivVO, queryCusIndiv);
			num = cusIndivDao.queryCusCountByFstChannel(queryCusIndiv);

		} catch (Exception e) {
			logger.error("查询数据发生异常!", e);
		}
		return num;

	}

	@Override
	public List<CusIndivVO> queryCusCountByFstChannelByPage(CusIndivVO vo) {
		logger.info("当前查询本人所属数据信息的参数信息为:");
		CusIndiv cusIndiv = beanCopy(vo, new CusIndiv());
		List<CusIndivVO> list = new ArrayList<>();
		try {
			List<CusIndiv> cusIndivs = cusIndivDao.queryCusCountByFstChannelByPage(cusIndiv);
			logger.info("当前查询本人所属数据信息的结果集数量为:" + cusIndivs.size());
			list = (List<CusIndivVO>) beansCopy(cusIndivs, CusIndivVO.class);
		} catch (Exception e) {
			logger.error("数据转换出现异常!", e);
		}
		return list;
	}
}
